package com.jd.tuning.jvm.threadpool;

import java.util.concurrent.*;

/**
 * 线程池1
 */
public class ThreaPoolTest {

    public static void main(String[] args) throws ExecutionException, InterruptedException {
        ThreadPoolExecutor threadPoolExecutor=
                new ThreadPoolExecutor(10,  //核心线程数
                        10,     //最大线程数=（核心线程+非核心线程）
                        //默认清空下指的是非核心线程的空闲时间
                        //如果allowCoreThreadTimeOut=ture :  核心线程或非核心线程允许的空闲时间
                        10L,
                        TimeUnit.SECONDS,
                        new LinkedBlockingDeque<>(),
                        Executors.defaultThreadFactory(),
                        new ThreadPoolExecutor.AbortPolicy());
        threadPoolExecutor.allowCoreThreadTimeOut(true);
        //类比的方式理解线程池
        //核心线程--->正式员工  corePoolSize
        //非核心线程 --->临时工
        // 公司能够招聘多少人   ->  maximumPoolSize  (正式员工+临时工)
        //keepAliveTime 一个人闲着没事多久，就会解雇掉，默认只会解雇外包人员（临时工），allowCoreThreadTimeOut=ture 正式员工闲着也会被解雇
        //BlockingQueue 类似于公司任务规划
        //ThreadFactory 相当于人才市场
        //RejectedExecutionHandler 该怎么样丢弃这任务
        threadPoolExecutor.execute(new Runnable() {
            @Override
            public void run() {
                System.out.println("线程池测试");
            }
        });

       Future<String> future=  threadPoolExecutor.submit(new Callable<String>() {
            @Override
            public String call() throws Exception {
                return "测试submit";
            }
        });
        String  s=future.get();
        System.out.println(s);
    }

}


